# 作者: 赵若云
# 2025年02月28日02时00分59秒
# 3478783573@qq.com

import re

# search, findall, finditer, sub, split
ret = re.search(r"\d+", "阅读次数为 9999，点赞数为 888，收藏666")
print(ret.group())  # 9999只能匹配第一个数字
print('-' * 50)


def find_second_match(pattern, text):
    matches = re.finditer(pattern, text)  # matches是一个迭代器，不会重复遍历前面的匹配项
    try:
        next(matches)  # 跳过第一个匹配项
        # next(matches)  # 跳过第二个匹配项，下面就找第三项了，以此类推
        second_match = next(matches)  # 获取第二个匹配项
        return second_match.group()
    except StopIteration:
        return None


text = "abc123def456ghi789"
pattern = r"\d+"
second_match = find_second_match(pattern, text)
print(second_match)
print('-' * 50)

# findall 字面意思查找所有匹配项，返回一个列表
ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)  # 此时ret是一个列表，不需要.group()方法
print('-' * 50)


def add(match_result):
    """
    返回值一定是字符串
    :param match_result: 匹配后的字符串
    :return:
    """
    return str(int(match_result.group()) + 1)  # .group()里面才是我们要处理的数字字符串


# sub 替换匹配项
ret = re.sub(r'\d+', '998', '阅读量997')
print(ret)  # 返回的是字符串，替换所有数字为998

ret = re.sub(r'\d+', add, '阅读量997')
print(ret)  # 返回的是字符串，替换所有数字为997+1=998
print('-' * 50)

# sub 只替换前两个
text = "apple apple apple apple"
pattern = r"apple"
replacement = "orange"
new_text = re.sub(pattern, replacement, text, count=2)
print(new_text)
print('-' * 50)

s = 'hello world, now is 2020/7/20 18:48, 现在是 2020年7 月20日18时48分。'
ret_s = re.sub(r'年|月', r'/', s)
ret_s = re.sub(r'日', r' ', ret_s)
ret_s = re.sub(r'时|分', r':', ret_s)
print(ret_s)
# findall 有问题,在分组前面加?:
com = re.compile(r'\d{4}/[01]?[0-9]/[1-3]?[0-9]\s(?:0[0-9]|1[0-9]|2[0-4])\:[0-5][0-9]')  # 正则表达式单独写出来
ret = com.findall(ret_s)  # 如果不加?:，只会给你分组内的内容，不给你全部
print(ret)
# search 没问题
ret1 = re.search(r'\d{4}/[01]?[0-9]/[1-3]?[0-9]\s(0[0-9]|1[0-9]|2[0-4])\:[0-5][0-9]', ret_s)
print(ret1.group())
